home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / PATHS.D < prev    next >
Encoding:
Modula Definition  |  1990-06-25  |  4.8 KB  |  116 lines

  1. DEFINITION MODULE Paths;
  2.  
  3. (*
  4.  * Dateisuchfunktionen
  5.  * -------------------
  6.  *)
  7.  
  8. FROM MOSGlobals IMPORT FileStr;
  9. FROM PathCtrl   IMPORT PathList;
  10.  
  11. CONST   FSelSymbol = '?';
  12.           (*
  13.            * Steht dieses Zeichen am Anfang eines Pfadnamen,
  14.            * rufen 'SearchFile' und 'FullName' den File-Selektor
  15.            * (PathEnv.SelectFile) auf.
  16.            *)
  17.  
  18. TYPE    ListPos = ( fromStart, fromNext );
  19.  
  20. PROCEDURE SearchFile ( REF fileName: ARRAY OF CHAR; VAR pathList: PathList;
  21.                        startOfSearch: ListPos;
  22.                        VAR found: BOOLEAN; VAR resultName: ARRAY OF CHAR );
  23.  (*
  24.   * Sucht nach der in 'fileName' angegebenen Datei auf den in 'pathList'
  25.   * aufgelisteten Pfade.
  26.   *
  27.   * 'pathList' muß über die Funktionen/Definitionen des Moduls 'PathCtrl'
  28.   * initialisiert werden (z.Zt. als Liste über das Modul 'Lists').
  29.   *
  30.   * Wenn 'startOfSearch'='fromStart', dann wird zuerst der im Dateinamen
  31.   * bestimmte Pfad versucht (nicht, wenn kein Pfad angegeben), dann die
  32.   * Pfade der Liste von Beginn an.
  33.   * Wenn als erstes der Defaultpfad des Defaultlaufwerks geprüft werden
  34.   * soll, muß vor dem Dateinamen ".\" als Pfadbezeichnung stehen.
  35.   *
  36.   * Wenn 'startOfSearch'='fromNext', wird ab dem Listenelement versucht,
  37.   * das dem Augenblicklichen von 'pathList' (siehe Lists-Modul) folgt.
  38.   *
  39.   * Der Suchname kann auch "Wildcards" (z.B. "*.TXT") enthalten, dann
  40.   * wird nach dem Verzeichnis gesucht, in dem mindestens eine dazu
  41.   * passende Datei vorkommt. In 'resultName' wird in diesem Fall aus
  42.   * Sichheitsgründen der erste reel existierende Name in dem Verzeichnis
  43.   * geliefert. Soll der gefundene Pfad mit dem Wildcard-Namen weiter-
  44.   * verwendet, werden, um beispielsweise mit Directory.DirQuery alle
  45.   * Dateien auf diesem Pfad zu finden, muß der Name neu aus dem gefundenen
  46.   * Pfad und dem Wildcard zusammengesetzt werden.
  47.   * Beispiel:
  48.   *   suchName:= '*.TXT'
  49.   *   SearchFile ( suchName, pathList, fromStart, found, resultName );
  50.   *   IF found THEN
  51.   *     Directory.ConcatPath (resultName, suchName, resultName);
  52.   * Nun steht in 'resultName' der gefundene Pfad mit dem Wildcard-Namen.
  53.   *
  54.   * 'pathList' zeigt nach dem Aufruf immer auf das zuletzt verwendete Listen-
  55.   * element. Wenn 'found'=TRUE, wurde die Datei unter dem in 'fileName'
  56.   * angegebenen Pfadnamen gefunden; in diesem Fall enthält 'resultName'
  57.   * den Dateinamen mit ggf. vorangehendem Pfadnamen, so wie er in der Pfadliste
  58.   * steht. Wird ein vollständiger Pfadnamen incl. Laufwerks- und Pfad vom
  59.   * Hauptverzeichnis ausgehend benötigt, ist danach 'Directory.MakeFullPath'
  60.   * aufzurufen.
  61.   *
  62.   * 'found' ist immer TRUE, wenn die Datei auffindbar ist, auch wenn
  63.   * 'resultName' zu klein ist, um den gesamten Namen zu fassen.
  64.   *
  65.   * Wenn ein Pfadname in der Liste '?' (FSelSymbol) ist, dann wird dafür
  66.   * die FileSelect-Routine aufgerufen.
  67.   *
  68.   * Enthält ein Pfadname (auch der in 'filename' übergebene) als erstes
  69.   * Zeichen das 'HomeSymbol', wird es automatisch durch den 'HomePath'
  70.   * (s.o.) ersetzt.
  71.   * Zu Beachten ist dabei aber, daß immer der zum Zeitpunkt des SearchFile-
  72.   * Aufrufs aktuelle 'HomePath' eingesetzt wird. Der 'HomePath' wird bei
  73.   * jedem Programmstart neu ermittelt!
  74.   *
  75.   * Beispielaufruf zum Suchen eines einmaligen Vorkommens:
  76.   *
  77.   *   filename:= 'D:\TERMINA.TOR'; (* so wird zuerst auf D:\ gesucht *)
  78.   *   SearchFile ( filename, pathList, fromStart, found, filename );
  79.   *   IF found THEN
  80.   *     Files.Open ( f, filename,
  81.   *     ...
  82.   *   END;
  83.   *
  84.   * Beispielaufruf zum Suchen aller Vorkommen in der Pfadliste:
  85.   *
  86.   *   SearchFile ( 'TERMINA.TOR', pathList, fromStart, found, resultname );
  87.   *   WHILE found DO
  88.   *     Files.Open ( f, resultname,
  89.   *     ...
  90.   *     SearchFile ( 'TERMINA.TOR', pathList, fromNext, found, resultname );
  91.   *   END;
  92.   *)
  93.  
  94. PROCEDURE MakeFullName ( VAR name: ARRAY OF CHAR; maySelect: BOOLEAN;
  95.                          VAR ok: BOOLEAN );
  96. PROCEDURE FullName     ( REF name: ARRAY OF CHAR; maySelect: BOOLEAN ): FileStr;
  97.   (*
  98.    * Wandeln einen Dateinamen (reine Pfadnamen sind hier nicht sinnvoll)
  99.    * in Großbuchstaben und ersetzen ggf. den 'HomePath'.
  100.    *
  101.    * Ist 'maySelect=TRUE' und 'name[0]' das 'FSelSymbol', wird die
  102.    * File-Selektor-Routine aufgerufen, um den Dateinamen zu erfragen.
  103.    * Ist dies nicht erwünscht, muß FALSE für 'maySelect' übergeben werden.
  104.    *
  105.    * Geliefert wird immer ein vollständiger Pfadname incl. Laufwerk und
  106.    * Pfad vom Root-Dir ausgehend (es wird dazu 'Directory.MakeFullPath'
  107.    * aufgerufen). Wenn der Pfad nicht existiert, oder wenn bei Aufruf des
  108.    * FileSelektors abgebrochen wurde, wird trotzdem der sich ergebende
  109.    * Name geliefert; 'MakeFullName' setzt dazu entsprechend 'ok'.
  110.    *
  111.    * Diese Funktionen können benutzt werden, um Pfadnamen einer Pfadliste
  112.    * selbst auszuwerten.
  113.    *)
  114.  
  115. END Paths.
  116.